Вернуться к странице отправки кода

Перейти к расширенной форме представления результатов

Результаты анализа

Длительность анализа: 11 seconds and 260 milliseconds

Путь Код Дефекты, контексты
01: #include <stdio.h>
02: #include <stdlib.h>
03: #include <string.h>
04:
05: struct el
06: {
07: double d;
08: char c;
09: struct el *next;
10: };
11:
12: int main(void)
13: {
Зафиксирована утечка памяти в конструкции <exit(integer(0))>, выделенной в <<annotation>:0:0> в контексте <main() : <initialization>:0:0-> void * D.2563 = malloc(integer(16)) : source.c:21:9> (RES-01A)
Зафиксирована утечка памяти в конструкции <exit(integer(0))>, выделенной в <<annotation>:0:0> в контексте <main() : <initialization>:0:0-> void * D.2567 = malloc(integer(16)) : source.c:36:17> (RES-01A)
14: struct el *p_start;
15: struct el *p_current;
16:
17: double dbl = 0.0;
18: char ch = '\0';
19: int i;
20:
21: p_start = (struct el *)malloc(sizeof(struct el));
22: if (!p_start)
23: exit(-1);
24:
25: scanf(" %lf %c", &dbl, &ch);
26: p_start->d = dbl;
27: p_start->c = ch;
28:
29: p_current = p_start;
30:
31: for (i = 0; i < 9; i++)
32: {
33: if (scanf(" %lf %c", &dbl, &ch) != 2)
34: continue;
35:
36: p_current->next = (struct el*)malloc(sizeof(struct el)); Использование некорректного (INVALID) указателя struct el * * TMP.11#struct el * p_current+integer(12) в выражении *struct el * * TMP.11#struct el * p_current+integer(12) = struct el * D.2568 (INI-03)
37: if (!p_current->next) Использование некорректного (INVALID) указателя struct el * * TMP.12#struct el * p_current+integer(12) в выражении struct el * D.2569 = *struct el * * TMP.12#struct el * p_current+integer(12) (INI-03)
38: exit(-1);
39:
40: p_current = p_current->next; Использование некорректного (INVALID) указателя struct el * * TMP.13#struct el * p_current+integer(12) в выражении struct el * p_current = *struct el * * TMP.13#struct el * p_current+integer(12) (INI-03)
41:
42: p_current->d = dbl; Использование некорректного (NULL) указателя double * TMP.14#struct el * p_current в выражении *double * TMP.14#struct el * p_current = double dbl.14 (INI-03)
43: p_current->c = ch; Использование некорректного (INVALID) указателя char * TMP.15#struct el * p_current+integer(8) в выражении *char * TMP.15#struct el * p_current+integer(8) = char ch.15 (INI-03)
44: p_current->next = NULL; Использование некорректного (INVALID) указателя struct el * * TMP.16#struct el * p_current+integer(12) в выражении *struct el * * TMP.16#struct el * p_current+integer(12) = integer(0) (INI-03)
45: }
46:
47: p_start = NULL;
48:
49: printf("Struct elements: %lf %c", p_current->d * 2 * 10, p_current->c + 5); Использование некорректного (INVALID) указателя char * TMP.17#struct el * p_current+integer(8) в выражении char D.2570 = *char * TMP.17#struct el * p_current+integer(8) (INI-03) Использование некорректного (NULL) указателя double * TMP.18#struct el * p_current в выражении double D.2573 = *double * TMP.18#struct el * p_current (INI-03)
50:
51: free(p_current);
52: return 0;
53: }

Пояснения

Графы таблицы имеют следующие назначения:

  • Путь — последовательность вызовов функций в программе от вызова из тела main() и до того места, где обнаружен дефект. Другие названия пути — стек вызова, контекст. Когда просматривается дефект и один из его контекстов, доступна навигация по элементам контекста. Начальная точка стека помечается (1), каждая последующая — (2), (3) и т. д. Последняя точка пути — место, где имеется дефект.
  • Код — проанализированный исходный код. При просмотре дефекта элементы его стека подсвечиваются розовым. Текущая просматриваемая строка подсвечивается красным. В строке, соответствующей дефекту, подчеркиваются перемеменные, связанные с дефектом.
  • Дефекты, контексты — графа для выбора просматриваемого дефекта и одного из его контекстов. Контекстов может быть несколько, если существует более одного пути достижения строки с дефектом. В этом случае в правой части графы доступен выпадающий список, где можно выбрать для просмотра один из контекстов.